iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
Security

從自建漏洞中學習 - 一起填坑吧系列 第 17

開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 2

  • 分享至 

  • xImage
  •  

開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 2

承繼上次的兩個功能的介紹後,今天我們來介紹主要會用到的 JWT ~

JWT 前言 (1) - 何謂認證與授權 ? 其差異為何 ?

在介紹 JWT 之前,我們需要來了解一下認證與授權:

認證 Authentication

  • 白話文解釋:

    我的身分是什麼?

  • 舉例說明:

    認證 (Authentication) 就像是遊樂園的通行證,而這個通行證就是用來識別你可以入場的資訊 (就像是身分識別ID),而當你走進遊樂園通道前,你需要在機器上刷通行證就是一種認證過程,在認證過程中,機器會把你的通行證資訊與系統內部的資訊進行核對,確認後你才能進遊樂園大玩特玩。

授權 Authorization

  • 白話文解釋:

    我能做什麼?

  • 舉例說明:

    授權 (Authorization) 就像是當你有了通行證後並進行認證後,你會有可以去玩哪些遊樂設施的權利(也就是在認證後,你能夠做什麼?)。假設你今天擁有 VIP 通行證,那麼認證後或許你就可以暢玩所有高級遊樂設施。

JWT 前言 (2) - Token 是什麼呢?

在介紹 JWT Toekn 之前,我們先來了解 Token 是什麼吧 ~

Token 是什麼?

這邊說的 Token 憑證的概念,就像是上面認證所說的通行證的概念啦~

在前後端溝通的時,token 就是兩端用來溝通用的憑證。

假設前端若和後端伺服器 request 資料時,都需要在帶上這個 token 憑證。

若沒有攜帶 token 憑證,或是憑證資訊有誤的話,伺服器都不會將資料回應資料。

就好比我們今天想要進去遊樂園玩,窗口人員認的都是我們的通行證或是印章,假設不見了或是洗掉了,就有點像憑證消失的感覺,也會無法進入遊樂園。

JWT (JSON Web Token)

JWT 運作流程簡介

我們這邊所說的 JWT,他是被歸類成 token-based 的一種實作,而所謂的 token-based,我們可以看以下圖:

https://ithelp.ithome.com.tw/upload/images/20231002/20107197hjFrRNXjSb.jpg
(圖源: https://www.wallarm.com/what/token-based-authentication)

圖的右方是 token-based 機制,而在機制中,後端 Server 發出憑證 token 後,會由前端決定如何儲存 token。

JWT 介紹

JWT 全名為 JSON Web Token,而其實作機制,顧名思義是使用 JSON 格式來做 token

在驗證成功後,會發出憑證,而憑證包含以下三個部分:

https://ithelp.ithome.com.tw/upload/images/20231002/20107197a44PswXjlS.png

參考上圖,我們可以把組合看成是三個 JSON object,其中用.來做區隔,而些部分會各自進行編碼,最後組成一個JWT 字串。

變成像是:aaaa.bbbb.cccc 的形式。

以下為三個部份的簡介:

  1. Header

    標記 token 的類型 & 雜湊函式名稱

  2. Payload

    要攜帶的 data,我們可以透過 payload 攜帶如時間戳記、簽發時間、token 的過期時間等。

  3. Signature

    Header + Payload + 密鑰 (secret) 進行雜湊來當成簽章,透過雜湊,可以用來驗證 JWT 是否經過篡改

(有關 JWT 詳細的介紹可以參考此篇文章: https://medium.com/%E4%BC%81%E9%B5%9D%E4%B9%9F%E6%87%82%E7%A8%8B%E5%BC%8F%E8%A8%AD%E8%A8%88/jwt-json-web-token-%E5%8E%9F%E7%90%86%E4%BB%8B%E7%B4%B9-74abfafad7ba )


今日小心得

今天的介紹就到這邊啦~ 話說最近真的頭痛欲裂,身體不太舒服QQ
希望自己能早日康復


Reference


上一篇
開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 1
下一篇
Auth 應用程式 - Signup API 實踐篇
系列文
從自建漏洞中學習 - 一起填坑吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言